Multiple software programs that run on a computing device often share libraries provided by the based operating system employed at the computing device. For example, these libraries can be used by the software programs to access various library or operating system functions (e.g., reading files, writing files, file management, network communications, inter-process communications, memory management, string manipulations, user interface manipulations, mathematics functions, etc.). Typically, these libraries change when the operating system changes or is updated; for example, upgrading to a newer version of an operating system can change the functions presented in one or more shared libraries, change versions and arguments used in these functions, and/or change functionalities of some, none or all of the library functions. As a result, a software program developed for one operating system may not work on another operating system and, similarly, upgrading to the new operating system may cause a software program not to work on the new or updated operating system. To determine whether a software program is executable on a new or updated operating system, the software program is typically re-compiled to run on the new or updated operating system.
The aforementioned re-compiling and re-running of the software program is further complicated when multiple software programs are involved and further, they include customer-generated software programs (e.g., third-party software programs that are created and provided by sources independent of the one providing the operating system and shared libraries). Furthermore, a user (e.g., software developer, system administrator, etc.) remains unaware as to which of the shared libraries are important to the multiple third-party software programs running on the operating system; consequently, by updating a shared library provided by the base operating system, the user risks breaking existing software and adding to inefficiency by wasting system resources.